#include<stdio.h>
#include<signal.h>
#include<unistd.h>
void print_sigset(const sigset_t*set)
{
    for(int i=0;i<31;i++)
    {
        if(sigismember(set,i))
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
    }
    printf("\n");
}
void show_pending()
{
    sigset_t pending;
    sigpending(&pending);
    printf("当前pending信号:");
    print_sigset(&pending);
}
void show_block()
{
    sigset_t block;
    sigprocmask(SIG_BLOCK,NULL,&block);
    printf("当前block信号:");
    print_sigset(&block);
}
int main()
{
    sigset_t set,oldset;
    sigemptyset(&set);
    sigaddset(&set,SIGINT);
    sigprocmask(SIG_BLOCK,&set,&oldset);
    printf("SIGINT已经被阻塞,按Ctrl+C多次试试...\n");
    for(int i=0;i<5;i++)
    {
        show_pending();
        show_block();
        sleep(3);
    }
    sigprocmask(SIG_SETMASK,&oldset,NULL);
    printf("SIGINT已恢复,可以被捕捉/递送了,再按Ctrl+C试试...\n");
    for(int i=0;i<5;i++)
    {
        show_pending();
        show_block();
        sleep(3);
    }
    return 0;
}